package com.itheima.controll;

import com.itheima.PoJo.Address;
import com.itheima.PoJo.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
@RestController
public class ResepenseBody {
    /*//响应数据为字符串
    @RequestMapping("/hello")
    public String Controller() {
        System.out.println("hello controller");
        return "hello";
    }

    //响应数据为对象
    @RequestMapping("/getAddress")
    public Address getAddress(){
        Address address=new Address();
        address.setProvince("湖北省");
        address.setCity("武汉市");
        return address;
    }

    //响应数据为集合
    @RequestMapping("/getArrayList")
    public ArrayList<Address> getArrayList(){
        ArrayList<Address>arrayList=new ArrayList<>();
        Address addr=new Address();
        addr.setProvince("广东省");
        addr.setCity("广州市");

        Address addr2=new Address();
        addr2.setProvince("福建省");
        addr2.setCity("福州市");

        arrayList.add(addr);
        arrayList.add(addr2);
        return arrayList;
    }*/

    //响应数据(统一数据格式)
    //响应数据为字符串
    @RequestMapping("/hello")
    public Result Controller() {
        System.out.println("hello controller");
        //return new Result(1,"success","hello");
        return Result.success("hello");
    }

    //响应数据为对象
    @RequestMapping("/getAddress")
    public Result getAddress(){
        Address address=new Address();
        address.setProvince("湖北省");
        address.setCity("武汉市");
        return Result.success(address);
    }

    //响应数据为集合
    @RequestMapping("/getArrayList")
    public Result getArrayList(){
        ArrayList<Address>arrayList=new ArrayList<>();
        Address addr=new Address();
        addr.setProvince("广东省");
        addr.setCity("广州市");

        Address addr2=new Address();
        addr2.setProvince("福建省");
        addr2.setCity("福州市");

        arrayList.add(addr);
        arrayList.add(addr2);
        return Result.success(arrayList);

    }
    /*
    三层结构:  Contronller:控制层,接收前端的数据
              Service:业务逻辑层,处理业务
              Dao:持久层,获取数据,数据处理
       IOC:控制反转,对象创建的控制权移到外部
                使用@Compenent注解Service类,Dao类
                    其他注解:@Controller,标注控制器
                            @Service,标注业务类
                            @Repository,标注持久层(数据访问类)
              注解命名:注解可以通过values属性起名
              springboot集成web开发中,声明控制器bean只能使用@Controller
              Bean组件扫描:想要上面四个注解生效,需要@CompenentScan扫描,该注解没有显示声明,集成在@SpringBootApplication中.
                          默认扫描启动类及其子包.否则需要在启动包里使用@CompenentScan注解手动添加.

       DI:容器运行时,需要的资源
                使用@Autowired注解,自动创建对象,解除耦合,默认按类型注入
                  相同类型,需要修饰注解:@Primary,在想要生效的类名上注解
                                     @Qualifier("Bean名"),在@Autowired上增加注解
                                     @Resource(name="Bean名"),与上面两种不同,不需要配合@Autowired.
                 @Resource与 @Autowired区别:
                                     1.前者是springboo框架提供,后者是jdk提供
                                     2.前者是按照类型注入,后者是按照名称注入

     */
}
